package com.ftg.learn.chapter05;


import java.util.Arrays;

/**
 * 可以使用帮助类
 * @author kangjx
 * @date 2022/12/26
 */
public class LearnArrays {

    public static void main(String[] args) {
        //类方法 ： 静态方法
        //在一个方法里面调用另外一个方法
        //高内聚低耦合
        // .[开闭原则]  [public（公共） private（私有）]
        // ·「功能单一职责」


        Arrays.binarySearch(new int[]{1,2,3,4,5,6,7,8,9,10},5);

        //开闭原则
        //给用户 开放的一定是最简单最直接，最好用的方式
        //所以中间层处理，底层处理、复杂处理，不要对用户开放

        //方法重载  ： 在一个类当中，有多个方法名称相同，参数列表不同(个数不同、类型不同、顺序不同)   方法重载  {重用性}

        //数组扩容
        int[] newarr = Arrays.copyOf(new int[]{1,2,3},6);
        int[] newarr1 = Arrays.copyOf(new int[]{1,2,3},2);
        System.out.println(Arrays.toString(newarr));
        System.out.println(Arrays.toString(newarr1));


        int[] a1 = new int[]{1,2,3};
        int[] a2 = new int[2];

        /**
         * 第一个参数 ： 原始数组
         * 第二个参数 ： 原始数组开始位置
         * 第三个参数  ： 目标数组
         * 第四个参数  ： 目标数组的开始位置
         * 第五个参数  ： 考贝几个
         */
        System.arraycopy(a1,2,a2,1,1);

        System.out.println(Arrays.toString(a2));


        // 花点时间来说明一下 ：

        //byte short int long float double char boolean

        // 基本类型是指不能再分解的数据类型，其数据在函数的调用中是以传值方式工作的
        // 所以说引用类型，其它就是其本类型编辑出来自定义数据类型，它是可以再拆分
        //Byte  Short Integer Long Float Double character Boolean 引用类型，与基本类型一一对应，所以我们也八大包装类
        // 八大包装类型与八大基本类型，互相转换  包装类型转换成为基本类型  拆箱、解包    基本转换成转包装类   装箱，打包
//        Byte  说白了就是用一个java的类，来完成对byte基本类型的操作以及方法封装


        Integer[] b1 = {1,2,3,4};
        Integer[] b2 = {1,2,3,4};

        System.out.println(Arrays.deepEquals(b1, b2));

        System.out.println(Arrays.equals(b1, b2));


        byte[] bs = new byte[34];
        Arrays.fill(bs,(byte)4);

        System.out.println(Arrays.toString(bs));


        System.out.println(Arrays.hashCode(bs));
        System.out.println(Arrays.hashCode(b1));
        System.out.println(Arrays.hashCode(b2));
        System.out.println(Arrays.hashCode(new int[]{1,2,3,5}));
        System.out.println(Arrays.hashCode(new byte[]{1,2,3,5}));

        //Arrays.数组帮助类，为我们生成的hashcode是与数组内容有关，内容完成一致和生成的hashcode相同


//        //增强型for循环
////        for（类型 变量 ： 数组|集合）{
////
////        }
//        for(byte byte1 : bs){
//            //数组快速遍历
//            System.out.println(byte1);
//        }
        int[] as = new int[]{45,2,3,1,7,19};
        //升序  底层采用的是双轴快速排序
        Arrays.sort(as);
        System.out.println(Arrays.toString(as));

        for (int i = as.length - 1; i >= 0; i--) {
            System.out.print(as[i] + "\t");
        }

    }
//    哈希码（HashCode），并不是完全唯一的，它是一种算法，目标是为了生成一段结构相似的数字来表示当前数据或者对象的唯一性
    // 身份证  ： 对现实生活当中的人，以数字形式来表示的 ，生成身份证时，要用到的规范
//    hashcode () 为一个对象生成一个可以表示其它结构算法
    //hashcode是可以相同. 不同的对象可以产生相同的hashcode吗？


    //把题 .. 扔出来！
    //多维... 字符串  {面向对象}


}
